<script>
    // 1. Array.isArray() 判断对象是否为数组。
    var arr1 = [12, 3, 4, 5];
    // var arr1 = new Array();
    console.log(typeof arr1); // object
    var boo1 = Array.isArray(arr1);
    console.log('boo1', boo1);

    // 2. includes() 判断一个数组是否包含一个指定的值。 // 成员只能是基本数据类型
    var arr2 = ['a', 'b', 'c', 'd'];
    var boo2 = arr2.includes('a'); // 
    console.log('boo2', boo2);

    // 3. join() 把数组的所有元素放入一个字符串。
    var arr3 = ['a', 'b', 'c', 'd'];
    var str3 = arr3.join('-'); // -是分隔符, 默认是逗号,也可以上是其他
    console.log('str3=', str3);

    // 4. reverse() 反转数组的元素顺序。
    var arr4 = ['a', 'b', 'c', 'd'];
    var newArr4 = arr4.reverse();
    console.log('newArr4', newArr4);

    // 5. slice() 选取数组的一部分，并返回一个新数组。类似字符串的slice方法
    var arr5 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
    var newArr5 = arr5.slice(2, 5);
    console.log('newArr5=', newArr5);

    // 6. pop() 删除数组的最后一个元素并返回删除的元素。
    var arr6 = [1, 2, 3];
    arr6.pop();
    console.log('pop', arr6);
    // 7. push() 向数组的末尾添加一个或更多元素，并返回新的长度。
    var arr7 = [1, 2, 3];
    arr7.push(4);
    console.log('push', arr7);

    // 8. shift() 删除并返回数组的第一个元素。
    // 9. unshift() 向数组的开头添加一个或更多元素，并返回新的长度。

    // 10. map()。对原来成员改头换面,传入一个函数, 返回一个新的数组
    var arr10 = [{
        name: 'zs',
        age: 10
    }, {
        name: 'ls',
        age: 20
    }, {
        name: 'ww',
        age: 30
    }];
    var newArr10 = arr10.map(function(item, index) {
        // 对名字进行处理
        var name = item.name.toUpperCase();

        return {
            name: name,
            age: item.age - 10
        };
    });
    console.log('newArr10=', newArr10);

    console.log('----------11. filter()----------------')

    // 11. filter() 检测数组元素，并返回符合条件所有元素的数组。
    var arr11 = [{
        name: 'zs',
        age: 10
    }, {
        name: 'ls',
        age: 20
    }, {
        name: 'ww',
        age: 30
    }];
    var newArr11 = arr11.filter(function(item, index) {
        return item.age >= 20;
    });
    console.log('newArr11=', newArr11);

    console.log('----------12. forEach() ----------------')
        // 12. forEach() 遍历数组。
    var arr12 = [{
        name: 'zs',
        age: 10
    }, {
        name: 'ls',
        age: 20
    }, {
        name: 'ww',
        age: 30
    }];
    arr12.forEach(function(item, index) {
        console.log(index, item);
    });
    console.log(str);

    // for循环
    var filmList = [{
        filmName: '电影1',
        time: 120
    }, {
        filmName: '电影2',
        time: 120
    }, {
        filmName: '电影3',
        time: 120
    }, {
        filmName: '电影4',
        time: 130
    }]
    var str = '';
    for (var i = 0; i < filmList.length; i++) {
        var item = filmList[i];
        str += `
        <li><span>${item.filmName}</span> <span>${item}</span></li> 
        `;
    }
    // document.querySelector('#list').innerHTML = str;

    // forEach循环
    var str = '';
    filmList.forEach(function(item, index) {
            str += `
        <li><span>${item.filmName}</span> <span>${item}</span></li> 
        `;
        })
        // document.querySelector('#list').innerHTML = str;


    console.log('----------13. find() ----------------')
        // 13. find() 返回符合条件的数组元素。 // 只返回符合条件的第一个成员, 没有符合条件就返回 undefined
    var arr13 = [{
        name: 'zs',
        age: 10
    }, {
        name: 'ls',
        age: 20
    }, {
        name: 'ww',
        age: 30
    }];
    var newArr13 = arr13.find(function(item, index) {
        // return item.name === 'zs';
        return item.age > 10; // 只返回符合条件的第一个成员
    });
    console.log('newArr13=', newArr13);

    console.log('----------14. findIndex() ----------------')
        // 14. findIndex() 返回符合传入测试（函数）条件的数组元素索引。
    var arr14 = [{
        name: 'zs',
        age: 10
    }, {
        name: 'ls',
        age: 20
    }, {
        name: 'ww',
        age: 30
    }];
    var index14 = arr14.findIndex(function(item, index) {
        return item.age === 30;
    });
    console.log('index14=', index14);

    // 15. indexOf() 搜索数组中的元素，并返回它所在的位置。
    // 16. lastIndexOf() 搜索数组中的元素，并返回它最后出现的位置。

    console.log('----------17. some()  ----------------')
        // 17. some() 检测数组元素中是否有元素符合指定条件。 // 用来判断数组是否包含符合条件的成员, 包含返回 true, 不包含返回 false
    var arr17 = [{
        name: 'zs',
        age: 10
    }, {
        name: 'ls',
        age: 20
    }, {
        name: 'ww',
        age: 30
    }];
    var boo17 = arr17.some(function(item, index) {
        return item.age > 10;
    })
    console.log('boo17=', boo17);

    console.log('----------18. splice() ----------------')
        // 18. splice() 从数组中添加或删除元素。参数可以是2个或者3个
    var arr18 = [{
        name: 'zs',
        age: 10
    }, {
        name: 'ls',
        age: 20
    }, {
        name: 'ww',
        age: 30
    }];
    arr18.splice(1, 1); // 两个参数,第1个参数表示下标,第2个参数,表示删除的成员个数
    console.log('arr18', arr18);

    var arr18 = [{
        name: 'zs',
        age: 10
    }, {
        name: 'ls',
        age: 20
    }, {
        name: 'ww',
        age: 30
    }];

    var item = {
        name: '张欢',
        age: 18
    };
    arr18.splice(1, 2, item); // 三个参数,第1个参数表示下标,第2个参数,表示删除的成员个数,第3个参数用来替代被删除的成员
    console.log('arr18', arr18);

    console.log('---------- 19. sort() ----------------')
        // 19. sort() 对数组的元素进行排序。
    var arr19 = ['a', 'c', 'x', 'd'];
    var newArr19 = arr19.sort();
    console.log('newArr19=', newArr19); // 按字母的升序排列

    var arr19 = [1, 2, 10, 20, 8];
    var newArr19 = arr19.sort();
    console.log('newArr19=', newArr19);

    // 传入一个函数参数,a-b升序排列,b-a降序排序
    console.log('---------- 19. sort(),传入函数 ----------------')
    var newArr19 = arr19.sort(function(a, b) {
        return b - a;
    });
    console.log('newArr19=', newArr19);

    console.log('---------- 19. sort(),成员是对象 ----------------')
        // 成员是对象时也是如此
    var arr19 = [{
        name: 'zhangsan',
        age: 10
    }, {
        name: 'lisi',
        age: 20
    }, {
        name: 'wangwu',
        age: 30
    }, {
        name: 'chenliu',
        age: 18
    }];
    var newArr19 = arr19.sort(function(a, b) {
        var nameA = a.name;
        var nameB = b.name;
        if (nameA > nameB) {
            return 1;
        } else if (nameA < nameB) {
            return -1;
        } else {
            return 0;
        }
    })
    console.log('newArr19=', newArr19);
</script>